Usando jQuery.Deferred para evitar retornos de chamada setTimeout aninhados

setTimeout ->
  console.log 'foo'
  setTimeout ->
    console.log 'bar'
    setTimeout ->
      console.log 'baz'
    , 1000
  , 1000
, 1000

É possível obter o mesmo resultado com jQuery.Deferred? Algo como o seguinte, talvez:

someFunction()
.then(-> console.log 'foo')
.then(delay 1000)
.then(-> console.log 'bar')
.then(delay 1000)
.then(-> console.log 'baz')

Talvez eu esteja errado em pensar que as promessas facilitam a escrita:Faça A, então uma vez que terminar, faça B, então uma vez que terminar, faça C.

questionAnswers(2)

yourAnswerToTheQuestion