¿Cómo encadeno tres llamadas asíncronas usando promesas jQuery?

Tengo tres llamadas HTTP que necesito hacer de forma sincrónica y ¿cómo paso los datos de una llamada a otra?

function first()
{
   ajax()
}

function second()
{
   ajax()
}

function third()
{
   ajax()
}


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

Intenté usar el aplazado para las dos funciones y se me ocurrió una solución parcial. ¿Puedo extenderlo a tres funciones?

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)})

Respuestas a la pregunta(10)

Su respuesta a la pregunta