I've never found anything that works well. I'm still laboriously spotting my scans manually.
Several years ago, I was told by an imaging specialist from Adobe that removing or at least significantly reducing surface imperfections was an active area of research for the company. Since then, Lightroom has acquired a fairly capable facility for removing sensor dust and Photoshop has made modest incremental improvements in dust and scratches removal, but neither application is yet capable of properly cleaning up scans to my satisfaction without manual intervention. Given Adobe's technical resources, I'm not surprised the various standalone tools I've tried (Topaz, etc.) aren't significantly better.
Theoretically, it should be possible to train a neural network to distinguish surface imperfections from real detail in scanned images. The obstacle, it seems to me, is assembling a proper "training set." You can't just scrape the Web for unprocessed image scans online. There are so many variables in scanned images—film or print, color or monochrome, high resolution or low—that you would need an enormous number of samples to account for all the combinations of attributes. If you could somehow surmount those hurdles and assemble enough images to train the neural network, the staff time required flag the unacceptable results would be enormous.