I'd say 2-3 passes is pretty normal. I suspect 4 is not uncommon.
For vertex-lit games, 1-2. Usually just the albedo pass then some post effect or another.
For pixel lit, 3+ is going to be the norm. 1st pass is g-buffer, z-buffer, surface normals and diffuse/albedo info as you describe it. Building blocks. 2nd pass we try to fit all other ops, but in certain instances -- like depth-of-field blur -- it may simply be impossible to eliminate the need for an additional pass just for that effect, since in nature one could consider DpFDoF blur to be an effect created by the eyes' shallow depth of field, which can only occur after all light has fallen (which describes all passes after the first and before the DoF blur)... clearly, a camera with long focal depth could view the same scene without blurring. So the effect, as such, is a post-process on the actuality of the fully rendered scene. This would also apply for effects like distortion through glass.
Although there's certainly overhead to additional passes, I think what's more important is that you limit costly operations (particulary conditionals) in each shader pass.