SELECT columns which contain data first
You could UNPIVOT, apply a ROW_NUMBER and then PIVOT it back. 

select
    CustID, 
    CustName, 
    [1] as [VL1], 
    [2] as [VL2], 
    [3] as [VL3], 
    [4] as [VL4], 
    [5] as [VL5], 
    [6] as [VL6],
    NUMBER
from(
    select 
        CustID, 
        CustName, 
        NUMBER, 
        V, 
        Seq = row_number() over (partition by CustID order by case when V = '' then 7 else null end)
    from
        (
        select 
            CustID, 
            CustName, 
            VL1, 
            VL2, 
            VL3, 
            VL4, 
            VL5, 
            VL6, 
            NUMBER
        from #CustData
        ) as cp
    unpivot
        (
        V for Vs in (VL1, VL2, VL3, VL4, VL5, VL6)
        ) up
    ) s
pivot
    (
    Max(V) for Seq in ([1],[2],[3],[4],[5],[6])
    ) p