Como faço para encadear três chamadas assíncronas usando promessas de jQuery?

Tenho três chamadas HTTP que preciso fazer de maneira síncrona e como faço para passar dados de uma chamada para outra?

function first()
{
   ajax()
}

function second()
{
   ajax()
}

function third()
{
   ajax()
}


function main()
{
    first().then(second).then(third)
}

Eu tentei usar o diferido para as duas funções e eu encontrei uma solução parcial. Posso estendê-lo para três funções?

function first() {
    var deferred = $.Deferred();
     $.ajax({

             "success": function (resp)
             {

                 deferred.resolve(resp);
             },

         });
    return deferred.promise();
}

function second(foo) {
     $.ajax({
            "success": function (resp)
            {
            },
            "error": function (resp)
            {
            }
        });
}


first().then(function(foo){second(foo)})

questionAnswers(10)

yourAnswerToTheQuestion