How to estimate and compensate for doppler shift in wireless signals?
This is a very common communications problem. Look in a textbook for "frequency synchronization"; whole books have been written on these and related topics. The technique that you would choose is a function of the specifics of your system. There are two common sources of frequency offset:


Differences in frequency between the reference oscillator at the transmitter and receiver. This error is usually small, depending upon the precision of the timebases available, and can be mitigated at some cost. Cheap crystal oscillators typically achieve 50 parts per million of error or better (although this does drift as the crystal ages). If you have a larger budget, you can use something like a Rubidium standard, which provides ~1 part per trillion of frequency error. A cheaper and increasingly common approach is to use a GPS receiver that has precision frequency output (typically 10 MHz). The highly accurate timebase available from the GPS constellation can be used to train the reference precisely on-frequency.
Physical dynamics effects between the transmitter and receiver. One notable example in which this comes into play are for satellite communications applications (especially in lower orbits), where the satellite is moving (and accelerating) very rapidly relative to any observer on the Earth. The high radial velocity of the satellite toward the receiver will cause a Doppler shift, and any change in that velocity caused by its orbit will cause that shift to change over time. In applications where you have these sort of dynamics, you typically can't mitigate it much, so you're left with building a receiver that tolerates the effects.


So how does a receiver synchronize with the transmitter in these cases? 


One common approach useful for phase- or frequency-modulated signals is to use a phase-locked loop. Design of PLLs is a complex topic in itself, but in essence, they are feedback systems can be used to acquire and track phase and frequency offset while your receiver is in operation. If you only need frequency synchronization, then you can use a frequency-locked loop instead; while they will not provide phase synchronization for you, they often have better acquisition properties.
As an alternative to a feedback loop, there are also feedforward approaches to estimating frequency or phase offset. One feedforward approach would take advantage of your training sequence to estimate the frequency error based on how the phase offset changes over the course of the sequence. If the frequency offset changes as time goes on, however, you would need to repeat the estimation procedure to allow your receiver to catch up.
Another technique is to design your system to be robust to (reasonably small) frequency offsets. Differentially-encoded phase modulation is an example of this (although frequency error will show up as a phase offset after differential decoding, which must be handled). Frequency-modulated waveforms such as FSK also have some level of resistance to frequency offset, as long as the offset is small relative to the amount of frequency deviation used by the transmitter.


This very short summary really just scratches the surface of some of the more well-known approaches. Synchronization can be a difficult problem to solve in practical ways, and there has been much research over the years on different ways to do it. It's going to depend upon exactly how your system is structured, and one very important variable: the target SNR. There isn't a single "correct" answer. I will make one textbook recommendation; while it is very expensive, "Synchronization Techniques for Digital Receivers" by Mengali is a comprehensive text on timing, phase, and frequency synchronization.