If you send an arbitrary, normalized vector to a Cycles shader’s normal input, it gets ignored:
If you can trace a path back to an actual normal, no matter how uselessly, the arbitrary vector gets used:
Ie, the vector is carrying some kind of data about type that gets inherited by derivative values-- there’s something telling Cycles, “Hey, this is ultimately a normal, it’s okay to use it.”
As far as I can tell, this is unique among Cycles nodes types. Colors don’t return 0 vectors from vector math nodes because they’re not vector data; vectors don’t return black from MixRGB nodes because they’re not color data. (Thank god.)
But I can’t see any good reason for why normals behave this way. Is there one? Is this just a weird bug? Are there any other types that carry metadata like this? Is there a reason it’s true for Cycles but not for Eevee?