There are specific issues with using tables in particular ways for layout that can cause problems. One of these is building an entire site layout in a single table in order to handle margins and placement -- because of the way tables are rendered this frequently means a website will not render progressively by the browser engine as the content downloads, and can only be rendered after the entire thing has been received. For a large page or slow modem user, they may be staring at a blank page for quite a while, which is a "Bad Thing". Never mind a lot of the inconsistencies in table rendering in the mozilla/ie5 generation of browsers that made consistent cross-browser table layouts somewhat painful, especially with images in the cells.
Supporters of the pure div path like to talk about content vs. presentation, because in theory HTML 4.01 is pure content, all of it meaningful. The divs provide meaningful organizational structure in an abstract sense, which is then given presentation exclusively by CSS. In these arguments, tables are valid only if being used to contain actual tabular data. Of course, this ignores the fact that for any sufficiently complex layout, there are almost always quite a few empty divs floating around simply to support the necessary hooks for presentation CSS, breaking the first level of this abstraction. Once this abstraction is broken, there's no law stating that, when your layout simply requires a presentation hook in the HTML that has no meaningful content, a div is somehow more appropriate than a table. If you are stuck with the choice of a meaningless div or a meaningless table in order to make your layout work, choose whichever is easier.
In the end, it's about being aware of the limitations in all methods and using the one that is most appropriate. There are many cases where using a table is simply easier than setting up a pointless (i.e. not-content-meaningful) array of divs, and the table rendering limitations don't apply. If the table is small and represents a minor chunk of the interior content, the rendering delay is not relevant.
I stopped using tables for structural layout about 2 years ago, and I have NEVER added an empty element to help with structure. It is perfectly fine to add divs and spans for help with structure, but they should still contain content.
correction, since I stopped using tables for structural layout, I have NEVER added and empty element...
I really agree with you're pragmatic approach to this problem. To really take advantage of CSS does require using div's and spans in the ways you describe... Take a look at CSS Zen Garden for a wicked example of leaving CSS hooks in HTML....
That would be partly correct. I have gone through the learning process by adding hacks, but once you get used to it, the cleaner you make your HTML/css the easier it is to get it to look and behave the way you need it. My premise is that if it's not working, you probably need to remove something rather than add something.