There may be a reason that merge() does not overwrite existing properties, but it caused me confusion in the way it is used by setOptions(). Because Mapstraction.prototype.setOptions calls mxn.util.merge, it will not work to set options that have already been set. This is in contrast to Mapstraction.prototype.setOption(), which always overwrites the existing value.
Adding overwrite to merge() would also provide a way to override the default method for a provider by calling mxn.register() a second time, which I've found myself wanting to do in some installations.