First, you must make sure that the default 'indent-tabs-modevalue is equal nil, for example:
(setq-default indent-tabs-mode nil)
Then, in viper-mode, it also depends on yours viper-expert-level. At level 1 or 2 TABit turns out to be tied to 'self-insert-commandthrough a mode map viper-insert-diehard-minor-mode(which is activated when the expert level is 1 or 2). I assume it is trying to ensure maximum compatibility with vi, which means that you are sacrificing some Emacs features, including using some fairly simple settings.
So ... you can upgrade your expert level to 3 or higher:
(setq viper-expert-level 5) ; really, why use anything less?
If you really need level 1 or 2, but want TAB to not be a self-insert command, add this to your .viper file:
(define-key viper-insert-diehard-map (kbd "TAB") 'viper-insert-tab)
, 1.