I know that there exists at least one solution, because $ax \equiv b \mod m \implies ax - b = qm$
Rearranging terms gives $ax - qm = b$, and since $d | a$ and $d | m$, so $d | b$ it can be said that $b \equiv 0 \mod d$.
I implemented Euclid's extended algorithm and have been able to experimentally verify that the claim holds, but I do not see a pattern or how I can begin to show there are exactly $d$ solutions.
def euclid_extended(x, y, i=0):
if y == 0:
print("iteration {0} returns ({1}, {2}, {3}) - base case hit with ({4}, {5})".format(i, x, 1, 0, x, y))
return (x, 1, 0)
else:
(d, a, b) = euclid_extended(y, x % y, i + 1)
print("iteration {0}. ({4}, {5}) => ({1}, {2}, {3})".format(i, d, b, a - b * (x//y), x, y))
return (d, b, a - b * (x//y))