How can I implement a non-CRUD function in hook_service_resources()?
The key is to use the actions array instead of the operations array when creating non-CRUD resources.

Here's an example for DrupalGap: http://drupalgap.org/node/187

FYI, all calls must use POST when using actions.

When using operations, the calls are directed based on the HTTP method (GET, POST, PUT, DELETE).

Don't forget to attach the X-CSRF-Token header to your POST calls. Its value can be retrieved here: ?q=services/session/token

Since this is for DrupalGap, and you're passing along an argument to your service resource, I'd recommend following these instructions, that way jDrupal can be utilized and your function(s) can easily be re-used:

http://drupalgap.org/node/203