You're right, "crs" is just required to support `_as_mpl_transform()`, so I think it is generally a `cartopy._crs.CRS`.  I don't believe it has to be a Projection (though for now, it must be 
Meanwhile, "axes" is really a `cartopy.mpl.geoaxes.GeoAxes`, at least for now (maybe one day a plain Axes as noted).