One idea would be to hide the `WMSLayer` entirely if the map's extent is outside the layers "valid" extent.

Based on [this answer](http://gis.stackexchange.com/a/66631/26864), one could listen to the map's `extent-change` event and check if the map's current extent is acceptable:

    map.on("extent-change", function () {
        // Check if map.extent is acceptable, otherwise hide the WMSLayer.
        if ((map.extent.xmin < maxExtent.xmin) ||
            (map.extent.ymin < maxExtent.ymin)  ||
            (map.extent.xmax > maxExtent.xmax) ||
            (map.extent.ymax > maxExtent.ymax)) {
            // Hide the WMSLayer.
        }
    }

This would not allow the `WMSLayer` to cover the map partially though.

The same idea could be applied using a server proxy as well.