1) Unless the function is callback or forward, you don't need "public". You use it when you need the function be accessed from outside your plugin scope.
2) Not sure to understand. In a custom function, you return whatever you want.
3) "@function() {}" is the same as "public function() {}". It can be handy if you do some macro with it but usually, I like you use it to differentiate callback from forward (just a visual hint).