¿Cómo puedo extender $ q promesa en Angularjs con un .success y .error

Escribí este pequeño código en un servicio personalizado en AngularJS.

En mi servicio:

        var deferred = $q.defer();
        var promise = deferred.promise;

        deferred.resolve('success');
        deferred.reject('error');

        /* Handle success and error */
        promise.success = function(fn) {

            promise.then(function(response) {

                fn(response);

            });

            return promise;
        };

        promise.error = function(fn) {

            promise.then(null, function(response) {

                fn(response);

            });

            return promise;
        };

En mi controlador:

        promiseService.myPromise()
            .success(function(data){

                $scope.success= data;

            })
            .error(function(data){

                $scope.error = data;

            });

Juste Manejar el éxito y el error de la promesa (servicio $ q). Necesito este código en muchos otros servicios, así que extendería directamente el servicio $ q con un servicio personalizado.

Así que me gustaría algo como esto en mi servicio:

    var deferred = myPromiseService.$qCustom.defer();
    var promise = deferred.promise;

    deferred.resolve('success');
    deferred.reject('error');

    return promise;

¿Alguna idea? Encontré una explicación para extender el filtro en Angularjs. Mi problema es encontrar la manera de extender toda la funcionalidad de $ q y agregar mi personalización.

Empiezo con algo así, es un trabajo manejar los $ q de la caja:

angular.module('myApp').service('myPromiseService', function($q){

  $qCustom = $q;  

});

Respuestas a la pregunta(3)

Su respuesta a la pregunta