How to display the term description on top of view
I haven't used Drupal 6 since 2010, so I can't speak to what used to be.

There are a few options here, given the differences in Views for 7/8 vs 6.


You can attach a field in the view header for the term description.
You can create a separate block display, and put that block on any term path.


I usually opt for #2, so I can put the term description and term name in a hero region, and keep the main view output uncluttered. Although you can use TVI in various ways, I stick to creating taxonomy/term/% as the page paths so feeding arguments so it is simple. So for the block, create a contextual filter and feed it the taxonomy term ID from URL.

You could also have the view render the term as a view mode as well, instead of fields. It's pretty flexible.

edit: The reason it shows without using TVI or Views is because the page callback for a term path hardcodes and prepends it: https://api.drupal.org/api/drupal/modules!taxonomy!taxonomy.pages.inc/function/taxonomy_term_page/7.x . 

That is one of a handful of reasons modules like TVI were created in the first place, so you can arrange your own display(s). Since TVI is injecting a View, it does not hardcode anything into the output:

/**
 * Replace taxonomy page callback.
 *
 * If more or less than one term is given then pass the request off
 * to the original taxonomy module page callback.
 *
 * @param int|object $tid
 *   The term tid or the term object.
 * @param null|int $depth
 *   The shown depth.
 *
 * @return array
 *   The build array.
 */
function tvi_render_view($tid, $depth = NULL) {
  if (is_object($tid)) {
    $tid = $tid-&gt;tid;
  }

  list($view, $display, $term, $settings) = tvi_get_view_info($tid);
  // Load metatags if needed.
  if (module_exists('metatag')) {
    metatag_entity_view($term, 'taxonomy_term', 'full', NULL);
  }
  if (is_object($view) &amp;&amp; $display) {
    $output = t('There was no content found matching this term.');

    if (isset($settings-&gt;pass_arguments) &amp;&amp; $settings-&gt;pass_arguments == 1) {
      // Pass all arguments to views. Exclude /taxonomy/term.
      $args = array_slice(arg(), 2);
    }
    else {
      $args = array($tid);
      if (NULL !== $depth) {
        $args[] = $depth;
      }
    }

    if ($view-&gt;display[$display]-&gt;display_plugin == 'block') {
      // If it's a block display, views returns a block array which won't work
      // as a page callback so we need to explicitly set the page title
      // and just return the $block['content'].
      $block = $view-&gt;execute_display($display, $args);
      drupal_set_title($block['subject']);
      $output = $block['content'];
    }
    else {
      global $language;
      module_invoke_all('entity_view', $term, 'taxonomy_term', 'full', $language-&gt;language);
      $output = $view-&gt;execute_display($display, $args);
    }

    return $output;
  }

  // Taxonomy is last resort - used if no standard views are found.
  module_load_include('inc', 'taxonomy', 'taxonomy.pages');
  return taxonomy_term_page($term);
}


This is easily solvable in a few minutes with either solution above.