Update on my progress:
While I was able to make some pieces of our internal toolkit work reasonably well with the ESRI API (and Dojo loader), I'm going to have to perform some serious surgery on many other pieces. I basically have a scenario where our entire framework (core sdk, ui widget system, unit testing, application loading/management) has a dependancy on our AMD loader (because many components of our framework are built with rjs). It seems like the inverse of this situation (ESRI API being a Dojo "build" and thus having a dependancy on the Dojo loader) is why I'm having trouble loading our internal modules using the ESRI loader... In other words, we have internal "optimized" modules that the Dojo loader doesn't know how to find and the ESRI API has "built" modules that we don't know how to find.
We are a very large organization that has an internal framework and library in place so that everyone is building client apps in a common, consistent manner, and it seems that I'm going to have to deviate greatly from this in order to accommodate the ESRI API. It seems unlikely to me that I would be the only one to ever run across this scenario, so I think it would be a great idea for ESRI to consider providing an "unoptimized"/unbuilt version of the API for greater ease of integration with existing JavaScript apps. At the very least, I think that it's an invalid assumption that forcing consumers of the ESRI API to use the Dojo AMD loader is inconsequential. For my situation, it's obviously causing huge headaches.
I apologize if there are any inaccurate assumptions about optimized AMD module loading in this post. In fact, if there are, please straighten me out. 🙂