Yes using Metropolis could produce invalid proposal as described in the other post you mentioned, but using Categorical distribution seems to work:
n = aCH_.eval().shape[1]
with pm.Model() as basic_model:
# Priors for unknown model parameters
b1 = pm.Uniform('b1', lower=0.3, upper=0.5, testval=0.45)
ncomp_aCH = pm.Categorical('ncomp_aCH', p=np.ones(n)/n)
ncomp_aCOH = pm.Categorical('ncomp_aCOH', p=np.ones(n)/n)
aCH=aCH_[0, ncomp_aCH]
aCOH=aCOH_[0, ncomp_aCOH]
out= b1*aCH+aCOH
# Likelihood (sampling distribution) of observations
Y_obs = pm.Normal('Y_obs', mu=out, tau=sigma, observed=Y)
trace = pm.sample(10000)