Merge multiple custom post types in a single archive template

As Jacob Peattle mentioned, you should not be using query_posts in your custom archive templates, that’s redundant as WP is already going to query those posts for you. What you really need is pre_get_posts (https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts). That will allow you to conditionally modify the parameters of the main query before it executes. Additionally since you are effectively executing the same query for all 4 CPTs, then it’s unnecessary to have 4 separate templates to do so, instead take a look at the template_include filter https://codex.wordpress.org/Plugin_API/Filter_Reference/template_include

Add the following to your functions file…

//Modify the main query    
function custom_archive_query($query){
   if(is_admin() || !$query->is_main_query()){
      return;
   }
   $cpts = array("research","documents","booklets");
   if(is_post_type_archive($cpts)){
      $query->set('post_type', $cpts);
      return;
   }
}
add_action('pre_get_posts', 'custom_archive_query');

//Add the template redirect
function custom_archive_template($template){
   $cpts = array("research","documents","booklets");
   if(is_post_type_archive($cpts)){
      $new_template = locate_template( array( 'custom_archive-template.php' ) );
      if(!empty($new_template)) return $new_template;
   }
   return $template;
}
add_filter('template_include', 'custom_archive_template');

As an additional note, you may need to adjust your query more than this example, and obviously your custom post type names to match. Your original query is paging at 4 posts per page, that may have undesired results due to the fact that you’re combining multiple post types.