Per the USERRA, the employer is not required to allow the employee to accrue vacation time during deployment. As such, if the employee accrues vacation time in the most common method - earning (for example) 1/2 day per paycheck, or some other similar method, the employer is not required to accrue those final 4 months' vacation time.
For most companies I've worked at, allowing you to spend vacation not accrued is at the discretion of the employer; at my current position, for example, they allow spending into the negative so long as you will accrue to zero by the end of the calendar/fiscal year. (We have full carryover, so this specificity is more needed than for use-it-or-lose-it employers.) As such, if the employer is aware that the employee will not accrue 1/3 of the days (say, 18 days, will not accrue 6 of them), it is reasonable for that employer to ask the employee not to take the vacation time. So I would say, most likely the employer is in the right, legally speaking, if the position is similar to most I've been in.
Now, this should be a consistently applied policy that affects all employees equally; the employer should have a clear policy as to when it is permitted to take time off in excess of accrual. Also, if the employer has a general one-time accrual, as one of my previous employers did - you immediately gain all vacation time on Jan 1, and can use it at any time - the employer should have a specific policy stating when this does not apply. If they don't have such a policy, and do have an instant-accrual policy, the employee may be able to make a reasonable argument that they are being discriminated against. The employee would want to talk to a labor lawyer before making any accusations of this, of course, and carefully read their employee handbooks. Also, if the employee is a union employee, speak first to the union representative, who may have additional information as far as what has been collectively bargained.
Finally, most companies have a policy that vacation can be denied for any reason; it's entirely possible they could use this to deny the vacation even if it is fully accrued on Jan 1, in a legal manner. Again, talk to an employment lawyer. Also, as Patricia noted in comments, talk to the folks in the Reserves; they may be able to help him/her out with information as to what is common practice, and what is legal/illegal in his/her particular case (although, much of it is likely dependent on company policy).
The ethical side of things, of course, is complicated, and not something really answerable here. What the company is doing is not terribly nice, but on the other hand the employee will be missing four months. I personally wouldn't fault the employee for taking the time, if he/she were able to do so without letting the employer know about the deployment, if the accrual is full on Jan 1.
This aside, the employer is required, per USERRA, to keep the reservist's vacation accrual rate the same; no seniority can be lost as a result of the deployment.