It seems like a lot of this syntax is driven by how you're testing your logic. A lot of this could be resolved by writing more integration-like tests than unit tests that tackle isolated parts of the code. You could set up a dummy Zendesk server that simply responds to `/user` and `/search` with something like this:
```javascript
var TestsUtil = require('oae-tests');

// Provisioned when setting up the test environment
var zendeskApp = null;
var zendeskServer = null;
var zendeskPort = null;

beforeEach(function(callback) {
    TestsUtil.createTestServer(function(_app, _server, _port) {
         zendeskApp = _app;
         zendeskServer = _server;
         zendeskPort = _port;

          // Configure OAE with the correct zendesk settings
          ConfigTestsUtil.updateConfigAndWait(...., callback);
    });
});

afterEach(function(callback) {
    zendeskServer.close(function() {
        zendeskApp = null;
        zendeskServer = null;
        zendeskPort = null;
        return callback();
    });
});
```
Have a look at the media core tests for an example

in your tests you can then create publications/tickets through the REST api rather than going via the TicketAPI directly.

```javascript
it('test something', function(callback) {
    zendeskApp.get('/api/v2/user', function(req, res) {
        res.send(200, {...});
    });

    // Trigger create ticket
    RestAPI.Publications.createPublication ..
});
```


I think this should take a lot of the mocking logic away and allow you to refactor most of this code into less prototype-like code and have simple exported/private functions a la:
```javascript
var createZendeskTicket = module.exports.createZendeskTicket = function(ctx, ticket, callback) {
...
}

var _getOrCreateZendeskUser = function(...) {
 ...
};

etc..
```