From the docs:
The jqXHR objects returned by $.ajax() as of jQuery 1.5 implement the Promise interface, giving them all the properties, methods, and behavior of a Promise (see Deferred object for more information)
You already get a jqXHR object (which is a superset of the XMLHTTPRequest object). It just implements the promise interface.
var jqXHR = $.ajax(ajaxOpts);
console.log(typeof jqXHR.abort);
jqXHR.done(dfd.resolve)
.fail(dfd.reject)
.then(next, next);