But apply feels so hacky. Is there a more standardized/common jQuery way to achieve this?
No, the jQuery way is hacky, and don't get me started at how the results are to be handled.
However, there is a standardised tool for this functionality that is implemented in all proper promise libraries (Bluebird, Q, RSVP, When, Dojo, and even in the upcoming ES6 promises), called all()
which is available as a static function on the promise constructor.