Javascript, 194 bytes
---

Late to the party, but I was piqued by @jdstankosky 's comment and decided to take a different approach. Here's a Javascript entry that mauls a template and evals itself along the way.

    t="a*b=c ";u="";r=u;for(i=1;i<10;i++){a=0;u=u+t;v=u.split(' ');r+=v.map(x=>x.replace('a',++a).replace('b',i)).map(x=>x.replace('*','x').replace('c',eval(x.substr(0,3)))).join(' ')+'\n'}alert(r);

Un-golfed version (slightly older version in which a function returns the table instead of a script alerting it, but the same principles apply):

    function f()
    {
        t="a*b=c ";	// template for our multiplication table
        u="";r="";	// tmp- and return values
        for(i=1;i<10;i++)
        {
            a=0;	// is auto-incremented in MAP
            u=u+t;// extend the template once per iteration
            v=u.split(' ');	// Smash the template to pieces
            w=v.map(x=>x.replace('a', ++a).replace('b', i))	// MAP replaces the A and B's with the correct numbers
            w=w.map(x=>x.replace('*', 'x').replace('c', eval(x.substring(0,3)))).join(' '); // second map evals that and replaces c with the answer, makes the asteriks into an X
            r=r+w+'\n'	// results get concatenated
        }
        return r;
    }