Script loaders should execute the factory function for CommonJS-style modules regardless of whether all dependencies were successfully resolved. Any errors in resolution should instead be thrown by the local require function. This would more closely mimic the behavior of CJS environments and enable module authors to handle unsatisfied dependencies. Authors could then specify "optional" dependencies (which currently cannot be expressed with AMD):
define(function(require) {
var Backbone = {};
var _ = require('underscore');
try {
Backbone.$ = require('jquery');
} catch(err) {}
// etc.
});