Simple solution
First, small correction to your validate
function:
def validate(value, rules, default)
return value if value.lower() in rules else default
and then simply assign the value to your result
v = "something"
allowed = ["someoption", "someother"]
default = "default_value"
v = validate(v, allowed, default)
Just keep it simple.
Regarding "pass by reference" - Python does not have this concept. If you pass into a function immutable type of value (like a string), it goes in the way which could be called "by value". If you pass in mutable object (like list), it goes in the way which could be called "by reference". There is no way, you would instruct Python to change how this is done.
ugly_validate with changing result "in place"
If you would really insist on modifying the result being passed in, this (ugly) way could work:
>>> def ugly_validate(value_lst, rules, default):
... if value_lst[0].lower() not in rules:
... value_lst[0] = default
...
>>> v = "something"
>>> allowed = ["someoption", "someother"]
>>> default = "default_value"
>>> v_lst = [v]
>>> ugly_validate(v_lst, allowed, default)
>>> v_lst
['default_value']
>>> v = "someoption"
>>> v_lst = [v]
>>> ugly_validate(v_lst, allowed, default)
>>> v_lst
['someoption']
Alternative solution using "identity dictionary" of allowed values
>>> allowed_dct = {key: key for key in allowed}
>>> allowed_dct
{'someoption': 'someoption', 'someother': 'someother'}
>>> res = allowed_dct.get(v, default)
>>> res
'someoption'
>>> v = "unknown"
>>> res = allowed_dct.get(v, default)
>>> res
'default_value'
Using dedicated class
>>> class AllowedValues():
... def __init__(self, allowed_values, default):
... self.allowed_values = allowed_values
... self.default = default
... def get(self, value):
... if value.lower() in self.allowed_values:
... return value
... else:
... return self.default
...
>>> allowed
['someoption', 'someother']
>>> judge = AllowedValues(allowed, default)
>>> v = "someoption"
>>> v = judge.get(v)
>>> v
'someoption'
>>> v = "unknonw"
>>> v = judge.get(v)
>>> v
'default_value'