Ok...

From client.js we call 
...

return window.webworks.execSync(_ID, "purchase", args);


And that calls (in index.js)

purchase: function (success, fail, args) {
...

So, I guess technically we can pass onPurchaseSuccess and onPurchaseFail as argument to purchase function in index.js. The new method signature will be -

purchase: function (success, fail, args, onPurchaseSuccess, onPurchaseFail ) {

and the function will return
success(onPurchaseSuccess(result));

[I am not sure if I have to say success(return onPurchaseSuccess(result));]

That should make things work synchronously and we all can be happy. I am up for improving the code as long as there is some defined way. I just didn't see callback method passed like that in the API codes that I was following.