Here are some thoughts I had that might be helpful:
1) Currently the createLoading is setup for Ajax calls in krad.initialize.js as the default ajax setup. I would propose taking this out here and instead adding it to the beforeSend in krad.ajax.js ajaxSubmitForm (here we can get the context of the button clicked).
2) A side cleanup, I think it would be better to create a removeLoading or something that does the unblockUi, instead of having the boolean parameter to createLoading.
3) Add the loadingMessageText property to Action. In performFinalize of Action, if loadingMessageText was set (not empty) add it as a data attribute for the action component (dataAttributes.put("loadingMsg", loadingMessageText).
4) In ajaxSubmitForm (and other methods if needed), get the jquery object the event was triggered on with $(this), then get the loadingMsg from the data: $(this).getData("loadingMsg"). We can then use the returned string to pass to createLoading. I am not exactly sure $(this) will be exposed here from the onclick. If not, we might have to build out our calls to the JS method (done in Action#performFinalize) to pass the id of the button then we can use a selector in ajaxSubmitForm.
Things are kind of messy with the ajax and action stuff now. I have an m2 item to work on cleaning it up. I think we will be ok to not have formatting options for the loading message on Action. They should be able to do what they need to through the plugin (once we add a widget class and stick on the view for the other Jira work).