Encadeamento de chamada ajax do jQuery com várias dependências

Eu não entendo mágicadiferido objetos com jQuery. Suponha o seguinte código:

function callWebService(uri, filter, callback)
{
  var data = {};

  if (filter && filter != '')
    data['$filter'] = filter;

  jQuery.ajax({
    url: '/_api/lists/' + uri + '/items',
    data: data,
    success: callback,
    dataType: 'json'
  });
}

function getInitialData() {
  callWebService("InitialData", "", function (data) {
    //do stuff with data
  });
}

function getGreenData() {
  callWebService("GreenData", "filter from InitialData", function (data) {
    //do stuff with data
  });
}

function getRedData() {
  callWebService("RedData", "filter from InitialData", function (data) {
    //do stuff with data
  });
}

function getFinalData() {
  callWebService("FinalData", "filter from RedData & GreenData", function (data) {
    //do stuff with data
  });
}

A ordem em que quero fazer as coisas é a seguinte: no final, chamarei quatro serviços da Web, enquanto as chamadas dependem uma da outra (uma longa cadeia):

LigargetInitialDataLigargetGreenData com dependência degetInitialDataLigargetRedData com dependência degetInitialDataLigargetFinalData com dependênciasgetGreenData egetRedData

Como você pode ver, 2 e 3 podem acontecer simultaneamente. Estou pensando que posso usarjQuery.when() (ouresolve?), Simplesmente não sei como aplicá-lo aqui. Eu acho que preciso refazer as funções para sempre retornar o objeto ajax?

O código pseudo ficaria assim:

getInitialData().then(getGreenData, getRedData).then(getFinalData)

questionAnswers(2)

yourAnswerToTheQuestion