Sorry, but that's not how shaders work. Since you're using a different shader for different nodes, each material is going to have to call the texture sampling at least once per shader per mesh/sprite, i.e. once per node. Nonetheless, the GPU is most likely optimized to cache these texture reads anyway for faster subsequent access, but beyond that there's not much you can do about it.
Besides, have you checked if this "issue" slows down your game substantially, 'cause otherwise, your looking for an optimization that's not necessary.
Edit: Also, even if they all shared the same shader, they're still all calling the shader code separately. The only way to have this shader called once, is if all of the sprites/meshes were joined into one. This would count as only one shader call, but I doubt that would be such a good idea. Again, as long as this isn't causing any performance issues you should be in the clear. :)