AJAX Edit Node and update
To answer the question of "where" do you add the AJAX functionality in a node form, the answer is in a form_alter. That can be done in a custom module or the theme's template.php file. I recommend a module so the functionality remains even if you change your theme.

A great resource is the examples module which is a group of example modules with great comments that assist developers in implementing Drupal functionality. In fact, there's is a submodule called ajax_example that adds ajax functionality to a a field in a node (exactly what you are looking for!). Here's an excerpt from ajax_examples_node_form_alter.inc:

/**
 * Implements hook_form_FORM_ID_alter() for the node form.
 *
 * Adds two fields to the node form, second only appears after first is enabled.
 */
function ajax_example_form_node_form_alter(&amp;$form, &amp;$form_state, $form_id) {
  $node = $form['#node'];
  $form['ajax_example_1'] = array(
    '#type' =&gt; 'checkbox',
    '#title' =&gt; t('AJAX Example 1'),
    '#description' =&gt; t('Enable to show second field.'),
    '#default_value' =&gt; $node-&gt;ajax_example['example_1'],
    '#ajax' =&gt; array(
      'callback' =&gt; 'ajax_example_form_node_callback',
      'wrapper' =&gt; 'ajax-example-form-node',
      'effect' =&gt; 'fade',
    )
  );
  $form['container'] = array(
    '#prefix' =&gt; '&lt;div id="ajax-example-form-node"&gt;',
    '#suffix' =&gt; '&lt;/div&gt;',
  );

  // If the state values exist and 'ajax_example_1' state value is 1 or
  // if the state values don't exist and 'example1' variable is 1 then
  // display the ajax_example_2 field.
  if (!empty($form_state['values']['ajax_example_1']) &amp;&amp; $form_state['values']['ajax_example_1'] == 1
      || empty($form_state['values']) &amp;&amp; $node-&gt;ajax_example['example_1']) {

    $form['container']['ajax_example_2'] = array(
      '#type' =&gt; 'textfield',
      '#title' =&gt; t('AJAX Example 2'),
      '#description' =&gt; t('AJAX Example 2'),
      '#default_value' =&gt; empty($form_state['values']['ajax_example_2']) ?
                          $node-&gt;ajax_example['example_2'] :
                          $form_state['values']['ajax_example_2'],
    );
  }
}

/**
 * Returns changed part of the form.
 *
 * @return renderable array
 *
 * @see ajax_example_form_node_form_alter()
 */
function ajax_example_form_node_callback($form, $form_state) {
  return $form['container'];
}