There are basically three parts to it; I'll show you a working example from one of my sites.  This has the Imagery Streets and Labels layers drawing over the imagery:1) Add the layers to your config.xml (note the order; the layers you want to draw on top go on the bottom): 
 <basemaps menu="menuMap">      
   <mapservice label="Street Map" type="tiled" visible="true" alpha="1" icon="com/esri/solutions/flexviewer/assets/images/icons/i_highway.png">http://10.2.8.73/ArcGIS/rest/services/Base_Map/Streets_Map/MapServer</mapservice>
   <mapservice label="Imagery" type="dynamic" visible="false" alpha="1" icon="com/esri/solutions/flexviewer/assets/images/icons/i_shuttle.png">http://10.2.8.73/ArcGIS/rest/services/Base_Map/Imagery/MapServer</mapservice>         
   <mapservice label="Imagery Streets" type="tiled" visible="false" alpha=".5" icon="com/esri/solutions/flexviewer/assets/images/icons/i_shuttle.png">http://10.2.8.73/ArcGIS/rest/services/Base_Map/Imagery_Street_Map/MapServer</mapservice>             
   <mapservice label="Labels" type="tiled" visible="false" alpha="1" icon="com/esri/solutions/flexviewer/assets/images/icons/i_shuttle.png">http://10.2.8.73/ArcGIS/rest/services/Base_Map/Labels/MapServer</mapservice>             
 </basemaps>
2) tweak the basemapMenuClicked function in the mapmanager.mxml:
private function basemapMenuClicked(event:AppEvent):void
      {
       var id:String = event.data as String;
       var configBasemaps:Array = configData.configBasemaps;
       for (var i:Number = 0; i < configBasemaps.length; i++)
       { 
        var label:String  = configBasemaps.label;
        var lyr:Layer = map.getLayer(label);
        if (lyr != null)
        {
         if (configBasemaps.id == id)
         {
          lyr.visible = true;
         }
         else
         {
          lyr.visible = false;
         }
        }
        var lyrNames:Layer = map.getLayer("Labels");
        if (id == "1")
        {
         lyrNames.visible = true;
        }
        else
        {
         lyrNames.visible = false;
        }
        
        var lyrNames2:Layer = map.getLayer("Imagery Streets");
        if (id == "1")
        {
         lyrNames2.visible = true;
        }
        else
        {
         lyrNames2.visible = false;
        }
        }
      }      
3) tweak the getBasemapMenuItems function in the configmanager.as file:
  private function getBasemapMenuItems(xmlList:XMLList):Array
  {
   var menuItems:Array = [];
   if (xmlList.length() > 1){
    for (var i:int = 0; i < xmlList.length(); i++){
     if(xmlList.@label != "Labels" && xmlList.@label != "Imagery Streets"){
     //if(xmlList.@label != "Labels"){
      var itemLabel:String = xmlList.@label;
      var itemIcon:String = xmlList.@icon;
      var itemValue:String = i.toString();
      var menuItem:Object = 
      {
       id: i,
       label: itemLabel,
       icon: itemIcon,
       value: itemValue,
       action: "basemap"
      }
      menuItems.push(menuItem);
     }
    }
       }
   return menuItems;
  }
Hopefully this simplifies it a little for you,Jason