All thanks to the code example link in [Eric's answer](https://civicrm.stackexchange.com/a/25083/35) here's a simplified example of how to offer up a hook (`my_new_hook`) which takes one argument, `$the_argument`:

    CRM_Utils_Hook::singleton()->invoke(
      1, $the_argument,
      $dummy, $dummy, $dummy, $dummy, $dummy,
      'my_new_hook');                                                                      

Then other extensions can include functions like

    function myextension_my_new_hook($arg) {
      do_something_with($arg);
    }

The `$dummy` is just because we must pass a variable (since it's passed by reference), but this hook does not need it. If you had a hook that took two arguments, you'd use `2` in place of `1` and replace the first `$dummy` with your actual second argument etc. up to 6.

Nb. this code assumes CiviCRM 4.5+, but obviously you're not using anything older than that these days, right?!