For optional arguments, it's convenient to have keyword arguments and defaults.
In context of method overrides and extensions and such, it seems better that the defaults are part of the method rather than the caller. This allows overriding and extending the defaults.
But another good approach seems to involve modeling functions as 'parsing' their arguments. Closer to OMeta or Prolog.