intentando romper la cadena de promesa jQuery con .then, .fail y .reject

Actualización: este problema fue resultado de jQuery 1.7 vs 1.8. No utilice nunca promesas en 1.7 porque no pueden cambiarse con una promesa dentro de un.then. Parece que 1.8 no lo estropearon.

http://jsfiddle.net/delvarworld/28TDM/

// make a promise
var deferred = $.Deferred();
promise = deferred.promise();

// return a promise, that after 1 second, is rejected
promise.then(function(){
    var t = $.Deferred();
    setTimeout(function() {
        console.log('rejecting...');
        t.reject();
    }, 1000);

    return t.promise();
});

// if that promise is successful, do this
promise.then(function() {
    console.log('i should never be called');
})

// if it errors, do this
promise.fail(function() {
    console.log('i should be called');
});

deferred.resolve();

Esperado: 'debería llamarme'

Actual: 'nunca debería ser llamado'

Problema: Quiero encadenar devoluciones de llamada y hacer que cualquiera de ellos pueda romper la cadena y activar elfail función, y omitir las otras devoluciones de llamada encadenados. No entiendo por qué todos los thens se activan y el fallo no se activa.

Vengo de la biblioteca Q de NodeJS, así que lo probé con.then primero. Sin embargo, cambiándolo a.pipe no tiene efecto.

Respuestas a la pregunta(2)

Su respuesta a la pregunta