You need to rephrase the question.
I can have any number of a's, b's, c's, and d's but not have any a's and d's following any b's.
In other words, you can have (a|c|d) any number of times, but when if a b appears, then any number of (b|c): so, (a|c|d)* (b (b|c)*) | ɛ).
It is formally equal to (a|c|d)* (b|c)* (you might want to figure out why), but in practice, despite being shorter, this one is subject to catastrophic failure when evaluated by the common regexp algorithms.
(If you want to test it on computational/practical regexps, as opposed to theoretical ones, it translates to [acd]*(?:b[bc]*)?.)
EDIT: Yeah, misread the question. "immediately following" might have been a good word choice. How about...
(a|c|d|b+c)*(b|ɛ)
(?:[acd]|(?:b+c))*b?
Explaining the logic here, you can use any of the letters, but if you use b, you can go on with any number of bs but when you tire of that the next one needs to be a c (the only remaining one if you stopped b-ing and can't do a or c). Then it's back to the usual programme. At the end, you can have a b that is not necessarily followed by anything.
awould only one a. Writinga*could be{ Epsilon, a, aa, aaa, aaaa...}. Something likeax*would be like{ax, axx, axxxxxx, ...}.$,^.