Wow, I didn't think this topic would catch this much interest from everyone. 
Emmanuel, I didn't know that the eyeToWorldMatrix was buggy... in fact I didn't even know what it was until you mentioned it!!
I'm really very new at this whole shading node thing...
To the original poster... when you talk about the Snow shader, do you mean the Mountain texture? --That one is a 'cheat'; it makes up the normals as it goes along based on a procedural, so the snow doesn't really know which way is up... you can turn your object sideways and the snow won't fall off. 
As for using another object as a 'control'... I noticed when setting up my network that if you apply the shader to a second object, it will be coloured according to the parameterisation and orientation of the FIRST object (since the pointOnSurfaceInfo node can only have one InputSurface, unless you use a shading switch). You can use this as a trick to control the shading on your object; make a copy of your object invisible, then assign the invisible one as the InputSurface. You will be able to rotate it manually to produce changes on the visible surface however you like!
Daveenedy... your solution will work as well, I think, but it only gives the distance to the control object, and I don't know if that's enough... it means that there will be rings of equal colour values around the object (because those points are equidistant from the control object). It would be useful in certain cases... this pointOnSurfaceInfo method would be useful in others.
Now, about my shader network...
I forgot to add one very important thing... in my example, using a sphere, I rebuilt the surface so it was parametised from 0 to 1 (it was originally 0 to 6). Of course you could just use the SetRange node to convert if you need to leave an object at a paramaterisation other than 0-1... I wasn't thinking clearly when I did this. 
Here are some example pics:

Here you can see how my default example behaves on a deformed sphere. There are NO LIGHTS in this scene; the network is attached to the shader's Incandescence attribute, rather than colour. Across the top set of images, the object is rotating, but the camera is staying still. In the next set of pictures, the sphere deforms. In both, you can see how the colour changes to reflect the normal (in worldspace) of each point on the surface.
In the final set of pictures, the camera moves around the sphere. I added a box for reference. The sphere is NOT transforming or deforming at all, so you can see that each point on its surface maintains a consistent colour, independent of the camera move.
Here's the shader network:

Don't forget that I added a Rebuild node to get my sphere parameters going from 0 to 1. This is because I'm an idiot, not because it's the only solution. 
Finally, because someone mentioned problems with the SetRange node, here's a picture of mine:

Should be very easy to do! --NormalizedNormal attribute goes from pointOnSurfaceInfo node to Value of SetRange... you set all the Max and Min values yourself. If I was smarter, I would have set my OldMin and OldMax to 0 and 6, and saved myself having to rebuild that surface!! Duh!!
Phew!! I hope this is helpful or interesting to someone.
-Steve