Views api: how to create a 'conditional' join
I havent done this in Views 3, but try the following, adopted from Views2 blog post applied to your code:
http://www.agileapproach.com/blog-entry/views-2-table-aliases-and-extra-criteria

# I think you had typo in your join for table2 where
# you had as the final key 'table1'.
$data['table3']['table']['join']['table2'] = array(
  'left_table' =&gt; 'table2',
  'left_field' =&gt; 'id_2',
  'field' =&gt; 'id_2',
  'extra' =&gt; array(
      array('field' =&gt; 'type', 'value' =&gt; 'blah'),
    ),
);