Extend SurfaceOutput or send additional parameters to the light model

Is there a way to extend “SurfaceOutput” writing a custom light model? If not, is there a way to send the light model additional parameter?

  1. declare a property in CGPROGRAM block (also like external parameters from shader)
  2. assign a value in ‘surf’ method
  3. read a value in lighting model