Ok to cycle there is bicycle=yes. If the way is explicitly meant for cycling (assigned to cycling) we tag bicycle=designated. If that is explicitly the main use, we tag highway=cycleway, which has the implicit tag bicycle=designated.
If walking is allowed on the cycleway (pedestrians are guests on the cycleway), we add foot=yes (which I feel should be the world wide default, but currently the default is foot=no).
This combination can indeed be interpreted as preference for cyclists.
Ok to walk there is foot=yes. If the way is explicitly meant for walking (assigned to walking) we tag foot=designated. If that is explicitly the main use, we tag highway=footway, which has the implicit tag foot=designated.
If cycling is allowed on the footway (bicycle is a guest on the footway), we add bicycle=yes (world wide default currently is bicycle=no, which I feel is correct).
This combination can indeed be interpreted as preference for pedestrians.
If a way is explicitly meant for both walking and cycling, without preference, the highway tag is neither footway nor cycleway. Some communities then simply assign a preference, tagging it as a footway with bicycle=yes, or a cycleway with foot=yes, usually based on the customs or legal rules in their country. I think that is a correct way of translating the effect of the local rules to OSM-wide tags.
But it is also correct NOT to assign a preference if there is none, by tagging highway=path|trail and then explicit foot=designated and bicycle=designated, as found on the legal traffic signs for combined foot/bicycle path.
Data users can handle the tags in a universal way, because the local specifics are expressed in OSM-wide access tags, combined with world-wide access defaults. (I know world wide access defaults are not exactly applied, but general purposerenderers and routers will usually come to the same conclusions).
One thing, some people require that there is a legal sign, in order to set the tag …=designated. I prefer to require that the designation is explicit, visible on the spot, so that walkers and cyclists can see what they are meant to do).
Logo’s on the road, kerbs, special pavings, and on private land signs put up by the owner, are al just as explicit and can amount to …=designated. The tag should let the user know what is going on.
Last thought, for now: the famous English public right of way. Where PROW materializes in public footpaths, I think highway=footway is appropriarte and sufficient on most sections (which implies foot=designated). Where the public footpath uses a different kind of highway (e.g. a public bridleway or track or cycleway or service road), simply add the tag foot=designated to this way.
Where a public footpath crosses a field, to my experience it almost always is very clear where you are supposed to walk, from each gate/stile/steps/ladder to the next. On the Hadrian Wall walk, we even were admonished time and again to NOT walk single file, but find a different trail, so as to prevent erosion of the grassy hills. Still, usually a clear trail was visible. Probably, the first walkers in the early spring will create a fresh trail from ladder to ladder along the field or within the corridor, but in all practicality these are clearly visible paths most of the year, and when not, still clear where the path will be once the first say 3-5 walkers have passed