Seems, you are only interested in pedestrian routing...
but pay attention to the surface tags because they may also be attached to other types. I assume, your example above catches almost everything, including bridges, roads, steps, etc.
In order to raise "surface" to some kind of artificial "main" tag try this (I havent tested it ... but it should work):
wtr.flagList = foot, surf
wtr.finalMask = foot|surf&foot
wtr.tag.surface.asphalt = 1, 2, 4, surf
wtr.tag.highway.[pedestrian|footway] = 2, 1, 5, foot
wtr.allow.highway.[pedestrian|footway] = foot
Important here is the first parameter - the priority - so if both are tagged, the surface clazz and speed "wins".
The additional wtr.allow is due to the fact, that osm2po ignores everything behind a lower wtr.tag definition. Which is correct but not for the optional last parameter. This is an issue and will be fixed soon. In the meantime use the additional wtr.allow decl.