I am the guy that came up with FCEUXD's Code/Data logger, the specification for the CDL files, and all of that. That stuff was all my idea back in 2004. My other idea was this exact project - a smart disassembler that produces a reassemblable disassembly using the CDL files (and ALL files - more on that later) as input. I actually implemented the disassembler (calling it xdDasm), but the project was abandoned. I never got it functional enough to be happy releasing it.
One thing I also implemented was an Address Label Logger. Basically FCEUXd would log these *.ALL files that would have ASCII lines that tell which instruction in the rom accessed which address in the rom. It was very useful for making labels work correctly across banks since if you see a JMP $8097, you don't know which bank that references and hence don't know where to put a label. It would only log accesses that went across banks.
Anyway, I am very happy to see someone else has done the disassembler. I know of a few other people that attempted this. _hyde_ had special logs he outputted from his own emu, and made his own unreleased disassembler - he did a lot of games with it. I don't know what snowbro used to make disassemblies for metroid and King's Quest 5 - he may have implemented something like this for it. Disch wrote his own smart disassembler and used his own logs from his emulator to do one for Final Fantasy 1. It's a pretty solid idea, just no-one has made a generic disassembler to do it.
You can find most of the disassemblies here that were produced by the above mentioned people.
(megaman 3 is the only one there that is xdDasm output. It was the only game I really got xdDasm to working with before I abandoned it)
There are a few cases I know of where this kind of smart disassembly won't work. There are games like Zelda which copies much of it's code to RAM. It won't be logged as code if it's being copied to RAM. Also, Fester's Quest has an annoying random number generator that likes to read random data from the ROM causing lots of crap to be logged as data (you have to hack that random number generator to be *nicer* before logging that game)