Edit in JSFiddle

var _adata,_bdata;
function a(){
    // .... processing
    var start = new Date().getTime();
    for (var i = 0; i < 1e7; i++) {
      if ((new Date().getTime() - start) > 500){
        break;
      }
    }
    var result = jQuery.parseJSON( '{ "data": "1234" }' );
    _adata = result;
    $("#debug").append("aData프로세스 완료<br>");
    return result;
}
function b(){
    // .... processing
    _bdata = 1234;
    $("#debug").append("bData프로세스 완료<br>");
    return _bdata;
}
function c_ajax(){
    return $.ajax({
        url: 'http://jsfiddle.net/echo/jsonp/',
        data: {
            text: 'some text',
            par1: 'another text'
        },
        dataType: 'jsonp',
        success: function(data){
            $("#debug").append("data = "+data.par1+"<br>");
            $("#debug").append("cData프로세스 완료<br>");
        }
    });
}
function d(aData, bData, abData){
   $("#debug").append("완료!!<br>");
   $("#debug").append("_adata="+_adata+", "+"_bdata="+_bdata+"<br>");
   $("#debug").append("aData.data="+aData.data+", "+"bData="+bData+"<br>");
   $("#debug").append("abData[0].text="+abData[0].text+"<br>");
}
function fail(){
    $("#debug").append("실패!");
}

$.when(a(), b(), c_ajax()).then(d,fail).done(d);
<div id="debug"></div>