Sebastian,
Well there is not a real good way to do this then. Here is something you could try though:
What I am doing is if the basemap is National Geographic and the user zooms in beyond 16 then I display a busy indicator and snap back to level 16 then hide the indicator.
require([
"esri/dijit/util/busyIndicator",
...
busyUtil,
...
bi = busyUtil.create({
target: "map",
fadeDuration: 500
});
basemapGallery.on("selection-change", function(evt){
if(evt.target._selectedBasemap.title === "National Geographic"){
var zoomEndEvt = on.pausable(map, "zoom-end", function(event){
if (event.level > 16){
zoomEndEvt.pause();
bi.show();
map.setLevel(16).then(function(){
bi.hide();
zoomEndEvt.resume();
});
}
});
}