Sachverhalt:
A. Der Arzt G._ bestellte zwischen Mai 2004 und Mai 2006 ca. 1000 Dosen Glucosamin- und Chondroitinsulfat ("GC") und gab sie in der Folge an seine Patienten ab.
B. Das Kantonsgericht Schaffhausen sprach G._ am 21. Mai 2008 schuldig der mehrfachen Übertretung des Heilmittelgesetzes, verzichtete aber auf eine Bestrafung. Es verpflichtete ihn, den unrechtmässig erzielten Vermögensvorteil von Fr. 15'000.-- an die Staatskasse abzuliefern.
Die Nichtigkeitsbeschwerde des Betroffenen hiess das Obergericht des Kantons Schaffhausen am 24. Februar 2012 gut. Es sprach ihn vom Vorwurf der mehrfachen Übertretung des Heilmittelgesetzes frei und verzichtete auf eine Ersatzforderung.
C. Die Bundesanwaltschaft führt Beschwerde in Strafsachen und beantragt, der angefochtene Entscheid sei aufzuheben und das Urteil des Kantonsgerichts zu bestätigen.
G._ beantragt in seiner Vernehmlassung zur Hauptsache, auf die Beschwerde sei nicht einzutreten bzw. sie sei abzuweisen (act. 15). Auf Ersuchen hat die Bundesanwaltschaft zum Antrag auf Nichteintreten Stellung genommen (act. 19 f.).
Erwägungen:
1. Der Beschwerdegegner bringt vor, gemäss eindeutigem Gesetzeswortlaut (Art. 15 Abs. 1 lit. c StBOG; SR 173.71) wäre nur der Bundesanwalt oder die Bundesanwältin sachlich legitimiert gewesen, Beschwerde zu führen, nicht jedoch "lediglich" ein juristischer Mitarbeiter.
Gestützt auf Art. 9 Abs. 3 StBOG hat der Bundesanwalt das Reglement über die Organisation und Verwaltung der Bundesanwaltschaft vom 22. November 2010 (SR 173.712.22) erlassen. Dessen Art. 5 Abs. 6 bestimmt, dass der Rechtsdienst Rechtsmittel gemäss Art. 381 Abs. 4 lit. a StPO ergreifen kann. Da in einem Rechtsdienst juristische Mitarbeiter die fachlichen Aufgaben zu erledigen haben, kommt ihnen Vertretungsbefugnis zu. Auf die Beschwerde des juristischen Mitarbeiters ist somit einzutreten.
2. Die Vorinstanz erwägt, am 2. Juli 2008 sei ein Präparat mit "GC" als Nahrungsergänzungsmittel vom Bundesamt für Gesundheit bewilligt worden. Da "GC" somit nicht mehr unter die Arzneimittel falle, sei der Beschwerdegegner in Anwendung des milderen Rechts (Art. 2 Abs. 2 i.V.m. Art. 333 Abs. 1 StGB) freizusprechen.
Die lex mitior (Art. 2 Abs. 2 StGB) ist auch auf Übertretungen anwendbar (Art. 104 StGB). Bei Verwaltungsstrafnormen gilt der Grundsatz aber nicht allgemein. Nach der bundesgerichtlichen Rechtsprechung greift der Grundsatz, wenn in der neuen Regelung eine mildere ethische Wertung zum Ausdruck kommt, nicht jedoch bei Änderungen aus Gründen der Zweckmässigkeit (BGE 123 IV 84 E. 3; 116 IV 258 E. 3; 89 IV 113 E. I/1). Diese Rechtsprechung wird, insbesondere wenn Verhaltensnormen einen Blankettstraftatbestand ausfüllen, kritisiert (POPP/LEVANTE, in: Basler Kommentar, Strafgesetzbuch I, 2. Auflage, Art. 2 N 9; ZR 102/2003 Nr. 64 S. 289 ff., je mit Hinweisen).
Die Zulassung von Präparaten wie "GC" ist ein generell-konkreter Hoheitsakt. Da solche hinsichtlich der lex mitior selbst von Kritikern der bundesgerichtlichen Rechtsprechung als Grenzfall betrachtet werden (POPP/LEVANTE, a.a.O.), ist die bisherige Rechtsprechung jedenfalls in Bezug auf generell-konkrete Hoheitsakte nicht in Frage zu stellen (vgl. auch Urteil 6B_979/2009 vom 21. Oktober 2010, insbesondere E. 4.5.3). Damit verletzt der vorinstanzliche Entscheid Bundesrecht.
3. Der angefochtene Entscheid ist aufzuheben und die Sache zur neuen Beurteilung an die Vorinstanz zurückzuweisen. Der mitunterliegende Beschwerdegegner hat die Hälfte der bundesgerichtlichen Kosten zu tragen (Art. 66 Abs. 1 BGG).
Demnach erkennt das Bundesgericht:
1. Die Beschwerde wird gutgeheissen, der Entscheid des Obergerichts des Kantons Schaffhausen vom 24. Februar 2012 aufgehoben und die Sache zur neuen Beurteilung an die Vorinstanz zurückgewiesen.
2. Dem Beschwerdegegner werden Gerichtskosten von Fr. 2'000.-- auferlegt.
3. Dieses Urteil wird den Parteien und dem Obergericht des Kantons Schaffhausen schriftlich mitgeteilt.
Lausanne, 14. Februar 2013
Im Namen der Strafrechtlichen Abteilung
des Schweizerischen Bundesgerichts
Der Präsident: Mathys
Der Gerichtsschreiber: Borner