Ok, you can account for this by doing another check within the server behavior when it is looping over the items. You can check the current item to see if it has a weight, if it does not then you can skip that one.
You can just alter the existing code in this server behavior where it is looping like this:
if ((WA_eCart_USPS_IsTrueValue("true")) && ($eCart1->DisplayInfo("TotalWeight") > 0) ) {
$Shipping_PackageArray[] = array();
$Shipping_PackageIndex = sizeof($Shipping_PackageArray)-1;
$Shipping_PackageArray[$Shipping_PackageIndex]["eCart_Quantity"] = (($Shipping_Packaging == 1)?$eCart1->DisplayInfo("Quantity"):1);
$Shipping_PackageArray[$Shipping_PackageIndex]["IsPackage"] = "true";
$Shipping_PackageArray[$Shipping_PackageIndex]["Quantity"] = "1";
$Shipping_PackageArray[$Shipping_PackageIndex]["WeightUnits"] = "oz";
$Shipping_PackageArray[$Shipping_PackageIndex]["PackageWeight"] = "".$eCart1->DisplayInfo("TotalWeight") ."";
$Shipping_PackageArray[$Shipping_PackageIndex]["PackageType"] = "YOURPACKAGING";
$Shipping_PackageArray[$Shipping_PackageIndex]["PackageSize"] = "REGULAR";
$Shipping_PackageArray[$Shipping_PackageIndex]["PackageMachinable"] = "true";
$Shipping_PackageArray[$Shipping_PackageIndex]["IPackageType"] = "Package";
//Special Services
}
This should allow it to just skip the items that do not have a weight if there are any items in the cart that do have a weight. Please test this out with your various scenarios and let us know if this works for you and if not let us know what the result is.