Issue 1:
Checklist

I have included the output of celery -A proj report in the issue.

software -> celery:4.1.0 (latentcall) kombu:4.1.0 py:3.6.3
billiard:3.5.0.3 py-amqp:2.2.2
platform -> system:Linux arch:64bit, ELF imp:CPython
loader -> celery.loaders.default.Loader
settings -> transport:amqp results:rpc:///

BROKER_URL: 'amqp://guest:********@rabbit:5672//'
CELERYD_PREFETCH_MULTIPLIER: 10
CELERY_ENABLE_UTC: True
CELERY_QUEUES: [<unbound Queue high-pri -> <unbound Exchange ''(direct)> -> high-pri.#>,
<unbound Queue low-pri -> <unbound Exchange ''(direct)> -> low-pri.#>]
CELERY_RESULT_BACKEND: 'rpc:///'
CELERY_RESULT_SERIALIZER: 'json'
CELERY_TASK_SERIALIZER: 'json'
CELERY_TIMEZONE: None
CELERY_WORKER_DIRECT: True
Queue: <class 'kombu.entity.Queue'>
os: <module 'os' from '/usr/local/lib/python3.6/os.py'>

I have verified that the issue exists against the master branch of Celery.

Steps to reproduce

Here is a minimal test to reproduce:

from celery import Celery, group
app = Celery('tasks')

@app.task
def pre():
print('in pre')
return 30

@app.task
def post1(arg1=None):
print('arg1={}'.format(arg1))
return arg1 + 1e1

@app.task
def post2(arg2=None):
print('arg2={}'.format(arg2))
return arg2 + 1e2

@app.task
def post3(arg3=None):
print('arg3={}'.format(arg3))
return arg3 + 1e3

@app.task
def post4(arg4=None):
print('arg4={}'.format(arg4))
return arg4 + 1e4

def wf():
return pre.s() | group([post1.s(), post2.s() | group([post3.s(), post4.s()])])

Run wf().apply_async()

Expected behavior

post2 receives the arguments from pre.s().

Actual behavior

post2 receives no arguments

Issue 2:
In the Documentations says:

Groups and chords accepts partial arguments too, so in a chain the return value of the previous task is forwarded to all tasks in the group...

but it doesn't if group contain chain.

Steps to reproduce

# ct.py
from __future__ import absolute_import, unicode_literals
from celery import Celery

app = Celery(
'ct',
broker='amqp://guest@localhost//',
backend='cache+memcached://127.0.0.1:11211/'
)

@app.task
def inc(x):
x += 1
return x

@app.task
def nothing(x):
return x

if __name__ == '__main__':
app.start()

Start worker:

python ct.py worker -l info

In python console:

>>> from ct import inc, nothing
>>> from celery import group, chain
>>> t = chain(inc.s(),group(chain(nothing.s(), inc.s()), inc.s()))
>>> r = t.delay(0)
>>>

In celery log:

[2017-04-10 12:43:36,126: INFO/MainProcess] Received task: ct.inc[5c1beeff-d785-4d81-af2c-35a5bba839ab]
[2017-04-10 12:43:37,257: WARNING/PoolWorker-1] /home/vagrant/ct-env/local/lib/python2.7/site-packages/celery/app/trace.py:542: RuntimeWarning: Exception raised outside body: TypeError('nothing() takes exactly 1 argument (0 given)',):
Traceback (most recent call last):
File "/home/vagrant/ct-env/local/lib/python2.7/site-packages/celery/app/trace.py", line 424, in trace_task
parent_id=uuid, root_id=root_id,
File "/home/vagrant/ct-env/local/lib/python2.7/site-packages/celery/canvas.py", line 987, in apply_async
args=args, kwargs=kwargs, **options))
File "/home/vagrant/ct-env/local/lib/python2.7/site-packages/celery/canvas.py", line 1063, in _apply_tasks
**options)
File "/home/vagrant/ct-env/local/lib/python2.7/site-packages/celery/canvas.py", line 567, in apply_async
dict(self.options, **options) if options else self.options))
File "/home/vagrant/ct-env/local/lib/python2.7/site-packages/celery/canvas.py", line 597, in run
first_task.apply_async(**options)
File "/home/vagrant/ct-env/local/lib/python2.7/site-packages/celery/canvas.py", line 221, in apply_async
return _apply(args, kwargs, **options)
File "/home/vagrant/ct-env/local/lib/python2.7/site-packages/celery/app/task.py", line 518, in apply_async
check_arguments(*(args or ()), **(kwargs or {}))
TypeError: nothing() takes exactly 1 argument (0 given)

exc, exc_info.traceback)))
[2017-04-10 12:43:37,262: ERROR/PoolWorker-1] Task ct.inc[5c1beeff-d785-4d81-af2c-35a5bba839ab] raised unexpected: TypeError('nothing() takes exactly 1 argument (0 given)',)
Traceback (most recent call last):
File "/home/vagrant/ct-env/local/lib/python2.7/site-packages/celery/app/trace.py", line 424, in trace_task
parent_id=uuid, root_id=root_id,
File "/home/vagrant/ct-env/local/lib/python2.7/site-packages/celery/canvas.py", line 987, in apply_async
args=args, kwargs=kwargs, **options))
File "/home/vagrant/ct-env/local/lib/python2.7/site-packages/celery/canvas.py", line 1063, in _apply_tasks
**options)
File "/home/vagrant/ct-env/local/lib/python2.7/site-packages/celery/canvas.py", line 567, in apply_async
dict(self.options, **options) if options else self.options))
File "/home/vagrant/ct-env/local/lib/python2.7/site-packages/celery/canvas.py", line 597, in run
first_task.apply_async(**options)
File "/home/vagrant/ct-env/local/lib/python2.7/site-packages/celery/canvas.py", line 221, in apply_async
return _apply(args, kwargs, **options)
File "/home/vagrant/ct-env/local/lib/python2.7/site-packages/celery/app/task.py", line 518, in apply_async
check_arguments(*(args or ()), **(kwargs or {}))
TypeError: nothing() takes exactly 1 argument (0 given)

Expecting result

>>> r.get()
[2, 2]

Celery info

celery -A ct report

software -> celery:4.0.2 (latentcall) kombu:4.0.2 py:2.7.9
billiard:3.5.0.2 py-amqp:2.1.4
platform -> system:Linux arch:64bit, ELF imp:CPython
loader -> celery.loaders.app.AppLoader
settings -> transport:amqp results:cache+memcached://127.0.0.1:11211/

broker_url: u'amqp://guest:********@localhost:5672//'
result_backend: u'cache+memcached://127.0.0.1:11211/'

Notes

Work fine with Celery 3.x