It's been a very long time since my last php coding. As I know about osCommerce (back to MS2 060817 release) the cart can be 'virtual', 'physical' and 'mix'. The code in shopping_cart.php decides the content type not by the weight, but the assigned filename for downloads. If there is no item with a download file assigned, it will be 'physical'. If every item has a filename assigned for download, it will be 'virtual'.
SDS is simply an enhancement for the stock download feature in osCommerce, it has nothing to do with shipping nor payment modules. When using a payment module which does not require customers leaving the store to make the payments and capable of updating orders status when payments completed, there is no need to modify the payment module to work with SDS. The only problem selling both tangible and intangible items using SDS would be the orders status issue. Actually it is a problem of osCommerce itself. In RC2a a flag for downloads has been added to get rid of the non-paid download accesses problems, there for the approach of downloads controller (orders status stuff) could be obsolete.