All that %brick.processInputEvent does is call/schedule (through the engine, not scripts for efficiency) the relevant output events on the brick (through loops or whatever) and set a "client" variable for it.
Processing the general output events might go something like this:
call(Target Class::Output Name,Target Object,[arg0,...argN],[activating client if the output has "appendclient" on it]);
I'm not sure you can actually call Class:: functions through call(), try this as well:
Target Object.call(Output Name,[arg0,...argN],[activating client if the output has "appendclient" on it]);
The general arguments would be what you set for the brick normally through the GUI (the direction the projectile goes in, type of projectile, etc.), stored in the variables, and you would have to provide the target object(s with named brick) and activating client through whatever method.