There is the Grad, that does what you want, but returns an output open to interpretation.
Grad[ (3 u). v,u]
3 1.v
Grad is defined to work on explicit lists with some obvoius rules of linearity.
So you can simply unprotect Dot and define
Dot[ x_?NumericQ, v_ ] := x v
Dot[ v_, x_?NumericQ ] := x v
Generally, multi-linear functions like Dot should be augmented by rules for Simplify in the case of inert, empty and numerical arguments. Physicists have no problem to interpret 1 and 0 as diagonal nxn matrices, for the dimension n, that the Dot product can insert at the current position without changing the result.
Here the number 1 is the abstract unit matrix of the dimension of v , as the unit matrices and their multiples are isomorphic to the field of scalars by actionon vectors and matrices.
Roland Franzius