The maxZoom
for the built-in mapTypes is predefined(depending on the mapType and the location)
What you can do:
Use a custom mapType (you may define a maxZoom for it that fit's your requirements)
Observe the zoom_changed-event of the map. When to zoom reaches the maxZoom
for the particular location(21 in this case) switch from the built-in mapType to your custom mapType(and switch back when the zoom goes below 21).