Background Some time ago I created already a shader for this. Because I wasn't 100% glad about it I tried to optimize my results.
Why not just use a glass shader? In the second picture you see the result of a normal glass material being used as a water shader. The problem is that water absorbs light the more the light travels trough it. A normal glass shader will show every object regardless of how deep the object is positioned. My old shader simply just blurred that object, the new one doesn't.
How does it work? Each material is given a Node-Group called "Fake_Volume". Instead of actually computing volumetrics the object is simpy rendered a gradient transparency below the water surface.
Blenderartists thread: https://blenderartists.org/t/look-into-the-water-shader-recreation/562175
Falloff: Influences the visibility ramp below water surface
Turbity: Overall visibility below water surface
Color Influence: Influence of the water color
Color Depth: Influences the water color ramp
Water Color: Color of the water below the surface
Camera Falloff: Visibility falloff based on the view distance