Seem to have figured it out, at least to the point sufficient for my purposes.
Indeed, the LIGHT variable is the intended output of the light() function, much like the DIFFUSE_LIGHT is for the spatial shader. It's the fraction of light from a source being processed that we wish to let through to the fragment.
The undocumented part, how it is used after the light() function, can be recovered from the builtin shader source.
For one, LIGHT is being multiplied by the LIGHT_COLOR. If the light() function already applied the color in a custom way, LIGHT_COLOR have to be altered:
LIGHT_COLOR = vec4(1.0); // cancel builtin multiplication by the light color
Also, LIGHT is being altered by the normal map. If the light() function already applied the normal map in a custom way, LIGHT_VEC have to be altered:
LIGHT_VEC = -NORMAL.xy * length(LIGHT_VEC); // cancel builtin bump mapping
It should be possible to disable the default bump mapping altogether by taking the normal map from the default texture slot, and instead passing it into the shader directly as a custom texture, but I haven't tried that.
As to whether LIGHT should be added to or assigned to, I have settled for the latter, as my lights in Add mode and appear to be added anyway when applied to the lightmap.