Light filters are arbitrary shaders that can modify, or filter, the incoming illumination from a given light. Light filters are just regular shaders attached to a light's "filters" parameter. Compared to an old-style RenderMan light shader, the only thing that an Arnold light filter cannot do is modify the light-emitting geometry and its associated sampling.
But you can also write your own light filter. Basically you can use some shaderglobals inputs (such as the light direction
sg->Ld, the distance
sg->Ldist, or, for a spot light,
sg->u/v) and overwrite the unoccluded light intensity
sg->Liu in-place. Below is a simple example that modulates the light intensity with a Perlin noise procedural texture:
The above example produces the following image: