Here's the code that I used:
var strTemp = new String();
function doStartApp(){
//Grab the current onunload event handler
var pos;
//If the opener page has an onunload event handler
if(parent.window.onunload)
{
strTemp = parent.window.onunload.toString();
pos = strTemp.indexOf("{"

+1;
//Parse out the code inside the function.
strTemp = strTemp.substr(pos,strTemp.length-(pos+1));
}
//Reset the function to our function.
//Our function will eval strTemp and execute it as well.
parent.window.onunload=closeApp;
OpenWin();
}
function OpenWin(){
theWindowName = "MYWINDOW"
strHeight = screen.height - 60
strWidth = screen.width - 12
featureStr = "height=" + strHeight + ",width=" + strWidth + ",left=0, top=0, menubar=no, scrollbars=no, resizable=yes";
winContent = '/MySite/MyFile.htm';
MYWINDOW = launch(winContent, theWindowName, featureStr, "test.asp"

;
return;
}
function closeApp(){
if (window.MYWINDOW){
if (MYWINDOW && !MYWINDOW.closed){
alert('closing App...');
MYWINDOW.close();
}
}
eval(strTemp);
return;
}
The doStartApp function is called on the click event of a button that is on another team's page. I grab the function that they are using (if any) for the unload event and convert it to a string. I then strip off the "function anonymous {" and the "}" that wrap their code. The browser evidently adds this as its not in the original code.
Once I do that, I store the result in a global variable and change the onunload handler to point to my function. My function first closes the App window and then executes the code that was originally intended to be the unload code.
The main advantage here is that I can change the onunload event of the calling window dynamically! And I can still execute the code that the creator of that window originally wanted.