Rotate particle on local axis through scripting

Im trying to control the local yaw orientation of particles distributed on, and aligned to the surface of 3D geometry (envision scales on a reptile, that follow a certain pattern). I'm able to achieve this on a flat surface, by setting the quaternian values for the particles based on a grayscale texture through a simple script. 
But applied to a curved geometry this obviously doesnt work. Could anyone with a bit of scripting/math insight give me a hint as to how i would approach manipulating only the local yaw axis after the particle has been aligned to the geometry?

And a secondary question: What is the best approach to achieve fine control of particle spacing when distributed on the surface of geometry? again, envision scales of varying size distributed on a dragon. Fine control of spacing would be required to prevent strange intersections or naked areas.

Forum Jump: