How to add a form to $node in hook_node_load()?
Not entirely sure why hook_node_load does not work, but some trial and error (in contrast to the documentation) led me to a working solution using hook_node_view instead.

The example code being:

function gp_shop_node_view($node, $view_mode, $langcode) {
  if ("product" == $node-&gt;type) {
    if ($view_mode == 'full' &amp;&amp; node_is_page($node)) {
      $node-&gt;content['gp_shop_order_button'] = drupal_get_form("gp_shop_order_button", $node);
      }
    }
  }
}

function gp_shop_order_button($form, &amp;$form_state, $node) {
  $form = array();

  $form['submit'] = array(
    '#type' =&gt; 'submit',
    '#value' =&gt; 'Order',
  );

  return $form;
}