<< Developer`
f[a_List, threshold_] := {First@a}~Join~
PartitionMap[If[#[[2]]Developer`PartitionMap[
If[#[[2]] > #[[1]]*threshold, Mean@Drop[#, {2}], #[[2]]] &, a, 3, 1]
~Join~1]~Join~{Last@a}
f[a, 2]
{1, 1.2, 1.4, 1.1, 0.9, 0.9, 0.9, 1.1}
Employs the criterion $If[a_i>ba_{i-1},....]$, where threshold
is the $b$.